package communicationTCP;

/**
 * Dictionnaire contenant et permettant de gérer les enregistrements
 * 
 * @author Alexandre BOURSIER, Nolan Potier
 * 
 */
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class Dictionnary {
	private HashMap<String, List<String>> liste;
	
	/**
	 * Constructeur par défaut qui construit le dictionnaire qui permettra de
	 * stocker tous les surnoms et les noms associés
	 */
	public Dictionnary(){
		this.liste = new HashMap<String, List<String>>();
	}

	/**
	 * Verifier si un surnom est disponible en s'assurant qu'il n'est pas déjà pris
	 * @param nickname
	 * 			le surnom cible
	 * @return true si le surnom est disponible, false sinon
	 */
	public boolean isAvailable(String nickname) {
		// Parcourir la liste des surnoms pour vérifier si celui en paramètre
		// est déjà présent dans le serveur
		for (String name : liste.keySet())
			if (liste.get(name).contains(nickname))
				return false;
		return true;
	}

	/**
	 * Ajouter le client cible
	 * @param name
	 * 		le nom à ajouter ou à compléter
	 * @param nickname
	 * 		le surnom à associer au nom
	 * @return true si l'opération s'est bien passée, false sinon
	 */
	public boolean add(String name, String nickname) {
		if (!liste.containsKey(name))
			liste.put(name, new ArrayList<String>());
		if (isAvailable(nickname)) {
			liste.get(name).add(nickname);
			return true;
		} else {
			return false;
		}
	}

	/**
	 * Liste soit:
	 *  - Les enregistrements de tous les clients
	 *  - Les enregistrements d'un client cible
	 * @param name
	 * 		le nom potentiel de la personne à rechercher
	 * @return	le dictionnaire des réponses associées
	 */
	public HashMap<String, List<String>> list(String name) {
		HashMap<String, List<String>> result = new HashMap<String, List<String>>();
		if(liste.get(name) != null)
			result.put(name, liste.get(name));
		return result;
	}

	/**
	 * Methode qui permet de recuperer la liste des surnoms et des noms
	 * 
	 * @return La liste de tous les surnoms et les noms associés.
	 */
	public HashMap<String, List<String>> getListe() {
		return liste;
	}

	/**
	 * Methode qui permet de modifier la liste des surnoms et des noms
	 * @param liste
	 * 		la nouvelle liste à associer
	 * 
	 */
	public void setListe(HashMap<String, List<String>> liste) {
		this.liste = liste;
	}
}
